<?php

/**
 * Description of Test
 *
 * @author Dingo
 */
class Modul_Admin_Aktualnosci_Edycja extends Modul_Admin_Abstract {

    protected $nazwaModulu = 'Admin_Aktualnosci_Lista';

    public function inicjalizuj() {
        $this->strona = array('tytul' => 'Edycja');
        $this->szablon = array('tpl1' => '../Admin/Aktualnosci/Edycja.tpl');

        if (isset($this->param['akcja']) &&
                $this->param['akcja'] == 'edytuj') {
            $this->edytuj();
        } else if (isset($this->param['akcja']) &&
                $this->param['akcja'] == 'dodaj') {
            $this->dodaj();
        } else if (isset($this->param['akcja']) &&
                $this->param['akcja'] == 'usun') {
            $this->usun();
        } else if (isset($this->param['akcja']) &&
                $this->param['akcja'] == 'url') {
            Helper_Aktualnosci::generujUrl(urldecode($this->param['url']));
        }
    }

    private function edytuj() {
        $id = isset($this->param['id']) ? $this->param['id'] : $_POST['id'];
        if (!is_numeric($id)) {
            die();
        }
        $aktualnosci = Sql::FindById('Aktualnosci', $id);
        $tagiSql = $aktualnosci->find_attached('Tagi');
        $tagi = array();
        /* Przystosowanie tagów do postaci tablicy stringów */
        foreach ($tagiSql as $v) {
            $tagi[] = $v->tag;
        }
        /* Wygenerowanie formularza */
        $form = new Form_Aktualnosci();
        $this->daneTPL['form']['poczatek'] =
                $form->otworzForma('/cms/aktualnosci/edycja/akcja,edytuj.html');
        $this->daneTPL['form']['aktualnosci'] =
                $form->generujAktualnosci($aktualnosci);
        $this->daneTPL['form']['tagi'] =
                $form->generujTagi(isset($_POST['tag']) ? $_POST['tag'] : $tagi);
        $this->daneTPL['form']['koniec'] =
                $form->zamknijForma();
        /* Sprawdzenie czy wysłano dane i czy dane są zwalidowanie poprawnie */
        if (isset($_POST['id'])) {
            $bledy = $this->walidujAktualnosci();
            if (Form_Valid::isValid($bledy)) {
                unset($_POST['id']); //usuniecie id, aby nie dodawało id = empty dla nowego rekordu!
                $aktualnosci->populate($_POST);
                if (!isset($_POST['status'])) {
                    $aktualnosci->status = 2;
                }
                $aktualnosci->save();
                /* Zapisywanie tagów */
                //usuwamy stare powiązania!
                foreach ($tagiSql as $v) {
                    $aktualnosci->detach($v);
                }
                if (isset($_POST['tag'])) {
                    foreach ($_POST['tag'] as $v) {
                        //sprawdzamy czy tag istnieje
                        $tagZSql = Sql::FindFirst('Tagi', array('tag' => $v));
                        if ($tagZSql === false) {
                            //nowy tag - tworzymy tag
                            $tag = new Tagi();
                            $tag->tag = $v;
                            $tag->save();
                            $aktualnosci->attach($tag);
                        } else {
                            //tag już istniej - tylko linkujemy
                            $aktualnosci->attach($tagZSql);
                        }
                    }
                }
                $this->zakoncz('/cms/aktualnosci/');
            } else {
                $this->daneTPL['bledy'] = $bledy;
            }
        }
    }

    private function dodaj() {
        $aktualnosci = new Aktualnosci();
        $tagi = array();
        /* Wygenerowanie formularza */
        $form = new Form_Aktualnosci();
        $this->daneTPL['form']['poczatek'] =
                $form->otworzForma('/cms/aktualnosci/edycja/akcja,dodaj.html');
        $this->daneTPL['form']['aktualnosci'] =
                $form->generujAktualnosci($aktualnosci);
        $this->daneTPL['form']['tagi'] =
                $form->generujTagi(isset($_POST['tag']) ? $_POST['tag'] : $tagi);
        $this->daneTPL['form']['koniec'] =
                $form->zamknijForma();
        /* Sprawdzenie czy wysłano dane i czy dane są zwalidowanie poprawnie */
        if (isset($_POST['tytul'])) {
            $bledy = $this->walidujAktualnosci();
            if (Form_Valid::isValid($bledy)) {
                unset($_POST['id']); //usuniecie id, aby nie dodawało id = empty dla nowego rekordu!
                $aktualnosci->populate($_POST);
                if (!isset($_POST['status'])) {
                    $aktualnosci->status = 2;
                }
                $aktualnosci->uzytkownik_id = $this->uzytkownik->id;
                $aktualnosci->datadodania = date('Y-m-d H:i:s');
                $aktualnosci->save();
                /* Zapisywanie tagów */
                if (isset($_POST['tag'])) {
                    foreach ($_POST['tag'] as $v) {
                        //sprawdzamy czy tag istnieje
                        $tagZSql = Sql::FindFirst('Tagi', array('tag' => $v));
                        if ($tagZSql === false) {
                            //nowy tag - tworzymy tag
                            $tag = new Tagi();
                            $tag->tag = $v;
                            $tag->save();
                            $aktualnosci->attach($tag);
                        } else {
                            //tag już istniej - tylko linkujemy
                            $aktualnosci->attach($tagZSql);
                        }
                    }
                }
                $this->zakoncz('/cms/aktualnosci/');
            } else {
                $this->daneTPL['bledy'] = $bledy;
            }
        }
    }

    private function walidujAktualnosci() {
        /* Walidacja */
        if (Form_Valid::isEmpty(Form_Valid::getFormValue('tytul'))) {
            $bledy[] = "Tytuł nie może być pusty";
        } else if (Form_Valid::isTooLong(Form_Valid::getFormValue("tytul"), 254)) {
            $bledy[] = "Tytuł może mieć maksymalnie 255 znaków";
        }

        if (Form_Valid::isEmpty(Form_Valid::getFormValue('zajawka'))) {
            $bledy[] = "Zajawka nie może być pusta";
        }

        if (Form_Valid::isEmpty(Form_Valid::getFormValue('tresc'))) {
            $bledy[] = "Treść nie może być pusta";
        }

        //pobieram aktualnosci i sprawdzam czy url jest unikatowy
        $wynik = Sql::FindFirst('Aktualnosci', array('url' => Form_Valid::getFormValue('url')));
        if (Form_Valid::isEmpty(Form_Valid::getFormValue('url'))) {
            $bledy[] = "Url nie może być pusty!";
        } else if (Form_Valid::isTooLong(Form_Valid::getFormValue("url"), 254)) {
            $bledy[] = "Url nie może mieć więcej niż 255 znaków";
        } else if ($wynik !== false &&
                ($wynik->id != Form_Valid::getFormValue("id"))) {
            //(!empty($wynik->id) || $wynik->id != Form_Valid::getFormValue("id"))) {
            $bledy[] = "Twój url nie jest unikatowy!";
        } else if (!Form_Valid::isPrawidlowyLinkURL(Form_Valid::getFormValue("url"))) {
            $bledy[] = "Url może składać się z liter,cyfr i myślników!";
        }

        //waliduje tagi
        if (isset($_POST['tag'])) {
            foreach ($_POST['tag'] as $k => $v) {
                if (Form_Valid::isEmpty($v)) {
                    $bledy[] = 'Tag ' . ($k + 1) . ' nie może być pusty';
                } else if (!Form_Valid::isTooShort($v, 3)) {
                    $bledy[] = 'Tag ' . ($k + 1) . ' musi mieć więcej niż 2 znaki';
                }
            }
        }

        return $bledy;
    }

    private function usun() {
        if (!isset($this->param['id']) || !is_numeric($this->param['id'])) {
            die();
        }
        $aktualnosci = Sql::FindById('Aktualnosci', $this->param['id']);
        $tagi = $aktualnosci->find_attached('Tagi');
        foreach ($tagi as $v) {
            $aktualnosci->detach($v);
        }
        $aktualnosci->status = 0;
        $aktualnosci->save();
        die();
    }

}

?>
